SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[spConciliaServicioConLegajo]
@Cuise Int,
@idAgente Int
AS
SET NOCOUNT ON
BEGIN TRANSACTION	

If @idAgente = -1 And @Cuise <> -1
Begin
	Declare Vinculaciones Cursor For 
	Select idVinculacion, Servicio, Legajo From tb_Vinculaciones Inner Join LegajosSalariales On Servicio = idServicioAgente 
	Where Cuise = @Cuise And Estado = 2
End

If @idAgente <> -1 And @Cuise <> -1
Begin
	Declare Vinculaciones Cursor For 
	Select idVinculacion, Servicio, Legajo From tb_Vinculaciones Inner Join LegajosSalariales On Servicio = idServicioAgente 
	Where Cuise = @Cuise And idAgente = @idAgente And Estado = 2
End

If @idAgente <> -1 And @Cuise = -1
Begin
	Declare Vinculaciones Cursor For 
	Select idVinculacion, Servicio, Legajo From tb_Vinculaciones Inner Join LegajosSalariales On Servicio = idServicioAgente 
	Where idAgente = @idAgente And Estado = 2
End

Declare @Mensaje Varchar(100), @Error Int, @HorasParciales Int, @Horas Int, @HorasLegajo Int, @RegimenSalarial Int, 
	@idServicioAgente Int, @Legajo Int, @ErrorC Int, @IdVinculacion Int

Select @Mensaje = 'OK', @Error = 0, @ErrorC = 0

Open Vinculaciones

Fetch Next From Vinculaciones Into @IdVinculacion, @idServicioAgente, @Legajo

While @@Fetch_Status = 0
Begin

	-- El servicio ya tiene un legajo salarial
	If Exists(Select * From LegajosSalariales Where idServicioAgente = @idServicioAgente And LegajoSalarial Is Not Null)
		Select @Mensaje = @Mensaje + ' El servicio ya tiene asignado un legajo salarial', @Error = @Error + 1

	Select @RegimenSalarial = C.RegimenSalarial, @Horas = Horas From tb_ServiciosAgentes, tb_Cargos C Where idCargo = CargoSalarial And idServicioAgente = @idServicioAgente
	Select @HorasParciales = Sum(Horas) From LegajosSalariales Where LegajoSalarial = @Legajo
	Select @HorasLegajo = Horas_Cat From CESIDA03 Where Legajo = @Legajo

	If @HorasParciales Is Null
		Select @HorasParciales = 0
	Else
		Select @HorasParciales = @HorasParciales + @Horas

	-- Con el Servicio que se vincula se exede el total de horas del Legajo
	If @RegimenSalarial = 13 And (@HorasParciales > @HorasLegajo)
		Select @Mensaje = @Mensaje + ' La viculacion del servicio exede el total de horas del Legajo Salarial', @Error = @Error + 1

	If @Error = 0 
	Begin
		Update LegajosSalariales Set LegajoSalarial = @Legajo Where IdServicioAgente = @idServicioAgente
		Select @ErrorC = @@ERROR
		If @ErrorC <> 0
			Goto Salir
		Update tb_Vinculaciones Set Estado = 1 Where IdVinculacion = @IdVinculacion
		Select @ErrorC = @@ERROR
		If @ErrorC <> 0
			Goto Salir
	End

	Fetch Next From Vinculaciones Into @IdVinculacion, @idServicioAgente, @Legajo

End

SALIR:
Close Vinculaciones
Deallocate Vinculaciones

If @ErrorC = 0
Begin
	Commit Transaction
	Select @Mensaje Resultado
End
Else 
Begin
	Rollback Transaction
	Select 'Ocurrio una excepción. Se deshacieron todos los cambios.' Resultado
End
GO
